package com.ftz.examinationsystem.service;

import com.ftz.examinationsystem.pojo.*;

import java.util.List;
import java.util.Map;

public interface UserService {
    /**
     * 导入学生数据到数据库
     * @param list 学生列表
     */
    void saveAll(List<Student> list);

    /**
     * 查询所有学生信息
     * @return
     */
    List<Student> showAll(Page page);

    /**
     * 返回数据库信息条数
     * @param page
     * @return
     */
    Long countStu(Page page);

    /**
     * 增加机房啊
     * @param room 机房信息
     * @return
     */
    int addRoom(Room room);

    /**
     * 按条件查询所有机房
     * @param roomQuery 查询条件
     * @return
     */
    List<Room> getRoomList(RoomQuery roomQuery);

    /**
     * 返回机房数量
     * @param roomQuery 查询条件
     * @return
     */
    Long countRoomList(RoomQuery roomQuery);

    /**
     * 根据id查找机房
     * @param id id号
     * @return
     */
    Room getRoomById(Integer id);

    /**
     * 修改机房信息
     * @param room 机房信息
     */
    void updateRoom(Room room);

    /**
     * 删除机房(包含机房删除，机房所排考场删除以及所有考场学生置为未安排状态)
     * @param ids 机房号的集合
     */
    void deleteRooms(String ids);

    /**
     * 查询所有学生信息（没有分页）
     * @return
     */
    List<Student> showStu();

    /**
     * 删除所有学生信息
     */
    void deleteStus();

    /**
     * 查询所有机房地址
     * @return
     */
    List<String> queryRoomAddr();

    /**
     * 查询所有机房信息
     * @return
     */
    List<Room> queryRoom();

    /**
     * 查询某个机房某天考试安排的开始和结束时间
     * @param times
     * @param roomid
     * @return
     */
    List<Map<Object,Object>> selectTime(String times,Integer roomid);

    /**
     * 机房考场分配
     * @param arrangeParam 分配的设置
     * @return
     */
    List<String> arrangerRoom(ArrangeParam arrangeParam);

    /**
     * 导入学生信息后增加课程名称
     * @param cname
     */
    void updateStu(String cname);

    /**
     * 查询三个校区分别有多少学生
     * @return
     */
    List<Integer> countStus(String cname);

    /**
     * 查询三个校区分别有多少机房
     * @return
     */
    List<Integer> countRooms();

    /**
     * 根据课程查询机房号和考试日期
     * @param cname
     * @return
     */
    List<Map<Object,Object>> selectIdDate(String cname);

    /**
     * 查询考试日期
     * @param cname
     * @return
     */
    List<String> selectDate(String cname);

    /**
     * 查询某一天某场考试所有机房考场数
     * @param cname
     * @param times
     * @return
     */
    List<Map<Object,Object>> selectRoomNumber(String cname,String times);

    /**
     * 获取所有考试课程名
     * @return
     */
    List<String> selectCourse();

    /**
     * 根据条件查询考试机房
     * @param roomQuery
     * @return
     */
    List<OrderRoom> geteRoomList(eRoomQuery roomQuery);

    /**
     * 考试机房数量
     * @param roomQuery
     * @return
     */
    Long counteRoomList(eRoomQuery roomQuery);

    /**
     * 删除已排考试机房信息
     * @param ids 每场考试编号
     * @return
     */
    int deleteERooms(String ids);

    /**
     * 删除考试机房表所有数据
     * @return
     */
    int deleteRoom();

    /**
     * 根据条件查询学生考试信息
     * @param query
     * @return
     */
    List<StuDetail> getStuArrangeDetail(eRoomQuery query);

    /**
     * 查询学生考试信息数量
     * @param query
     * @return
     */
    Long countArrangeDetaile(eRoomQuery query);

    /**
     * 删除所有考生信息
     * @return
     */
    int deleteArrangeStu();

    /**
     * 根据课程名查询没有安排考试的学生
     * @param cname
     * @return
     */
    List<Student> selectUnState(String cname);

    /**
     * 个别安排
     * @param inidivalArrange
     * @return
     */
    int individualArrange(InidivalArrange inidivalArrange);

    /**
     * 根据机房名和考试科目查找所有考试场次
     * @param cname
     * @param roomAddr
     * @return
     */
    List<ERorder> selectERorderByRoomAddr(String cname,String roomAddr);

    /**
     * 根据id和日期查询学生考试信息
     * @param cname
     * @param EROrdId
     * @param ExamDate
     * @return
     */
    List<EStudent> selectByIdDate(String cname,String EROrdId,String ExamDate);

    /**
     * 清除指定考场指定学生
     * @param ids
     * @param cname
     * @return
     */
    int deleteStusById(String ids,String cname);

    /**
     * 修改erorder表参加考试人数
     * @param cname
     * @param erordId
     * @param examDate
     * @return
     */
    int updatanumber(String cname,String erordId,String examDate,int cnt);

    /**
     * 根据id和课程名更新安排状态
     * @param ids
     * @param cname
     * @return
     */
    int updateStateByIdCourse2(String ids,String cname);

    /**
     * 根据EROrdId，ExamDate，Etype删除erorder中考场信息
     * @param erorder
     * @param examdate
     * @param cname
     * @return
     */
    int deleteerorder(String erorder,String examdate,String cname);

    /**
     * 根据EROrdId，ExamDate，Etype删除estudent中考生信息
     * @param erorder
     * @param examdate
     * @param cname
     * @return
     */
    int deleteStudents(String erorder,String examdate,String cname);

    /**
     * 根据机房地址获取容量
     * @param name
     * @return
     */
    int cntByName(String name);

    /**
     * 查询所有学生安排信息
     * @return
     */
    List<StuDetail> selectAllestudent();

    /**
     * 查询所有机房考试信息
     * @return
     */
    List<OrderRoom> selectAllRoom();

    /**
     * 交换学生考场信息
     * @param course
     * @param leftroom
     * @param rightroom
     * @param rightStr
     * @return
     */
    int changeStus(String course,String leftroom,String rightroom,String rightStr,int leftnumbers,int rightnumbers);

    /**
     * 根据机房名查机房id
     * @param name
     * @return
     */
    int selectroomByname(String name);

    /**
     * 根据机房id查询所有考场信息
     * @param id
     * @return
     */
    List<ERorder> queryAllById(int id);

    /**
     * 清除考场时获得考场所有学生id
     * @param erorder
     * @param examDate
     * @param cname
     * @return
     */
    List<String> queryIDS(String erorder,String examDate,String cname);

    /*登录*/
    Admin login(Admin admin);

    int selectByUsername(String username);

    int inseruser(String username,String password);

    List<StuDetail> showRoomStu(String examDate,String order,String etype);
}
